package com.platform.study.thread;

import java.util.HashSet;
import java.util.Set;
import java.util.Vector;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 用实现Runnable接口方式实现线程:线程同步
 *
 * 在两个或者更多的线程访问的成员变量上使用volatile。
 * 当要访问的变量已在synchronized代码块中，或者为常量时，不必使用。
 * 由于使用volatile屏蔽掉了VM中必要的代码优化，所以在效率上比较低，因此一定在必要时才使用此关键字。
 *
 * User: wangyanginfo
 * Date: 12-11-26
 * Time: 下午2:44
 */
public class RunnableSimple_A implements Runnable {

    // volatile 修饰符
    private volatile int ticket = 500;
    @Override
    public void run() {
        for (int i = 0; i < 180; i++) {
            if (ticket > 0) {
                System.out.println(Thread.currentThread().getName() + " 运行 _  " + ticket--);
            }
        }
    }

    public static void main(String[] args) {
        RunnableSimple_A simpleA = new RunnableSimple_A();
        Thread thread1 = new Thread(simpleA, "线程1");
        Thread thread2 = new Thread(simpleA, "线程2");
        Thread thread3 = new Thread(simpleA, "线程3");
        thread1.start();
        thread2.start();
        thread3.start();
    }
}
